package utility

import (
	"strconv"
	"strings"

	"github.com/gogf/gf/v2/text/gregex"
)

// MatchAntPath 判断给定的URI是否匹配指定的Ant风格路径 pattern
// 支持 * 和 ** 匹配
func MatchAntPath(pattern string, uri string) bool {
	// 将 Ant 风格路径转换为正则表达式
	pattern = strings.ReplaceAll(pattern, ".", "\\.")
	pattern = strings.ReplaceAll(pattern, "*", "[^/]+")
	pattern = strings.ReplaceAll(pattern, "**", ".+")

	// 确保完全匹配
	regexPattern := "^" + pattern + "$"

	// 使用 gregex 进行匹配
	// 使用 gregex.MatchString
	matches, err := gregex.MatchString(regexPattern, uri)
	if err != nil {
		// 正则错误（例如 pattern 不合法），可以根据需要记录日志或返回 false
		return false
	}

	return len(matches) > 0
}

// DerefString 安全解引用字符串指针
func DerefString(s *string, def ...string) string {
	if s == nil {
		if len(def) > 0 {
			return def[0]
		}
		return ""
	}
	return *s
}

// DerefInt 安全解引用int指针
func DerefInt(i *int, def ...int) int {
	if i == nil {
		if len(def) > 0 {
			return def[0]
		}
		return 0
	}
	return *i
}
func StringToInt(s *string, def int) int {
	if s == nil {
		return def
	}
	val, err := strconv.Atoi(*s)
	if err != nil {
		return def
	}
	return val
}
